perm filename DATRAN.SAI[SYS,HE] blob
sn#057816 filedate 1973-08-14 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 BEGIN "DATRAN" COMMENT PROGRAM TO MANIPULATE CALIBRATION FILES
00005 00003 α VARIABLES AND COPYING PROCEDURES
00007 00004 α PARSE SPECIFICATIONS - FALSE IF ERROR
00009 00005 α DISPLAY ROUTINE
00013 00006 α READ AND WRITE COMPOSITE DATA SETS
00016 00007 α HERE IS THE MAIN PROGRAM
00019 ENDMK
⊗;
BEGIN "DATRAN" COMMENT PROGRAM TO MANIPULATE CALIBRATION FILES;
REQUIRE "UTIL" LOAD_MODULE, "DPYSUB.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "⊂⊃||" DELIMITERS;
DEFINE α=⊂COMMENT⊃, CRLF=⊂'15&'12⊃, SAFEX=⊂ ⊃, OLD=⊂1⊃, NEWX=⊂2⊃;
EXTERNAL STRING PROCEDURE DATIM;
EXTERNAL PROCEDURE COMIN;
EXTERNAL PROCEDURE COMOUT;
EXTERNAL PROCEDURE COMWRITE;
EXTERNAL PROCEDURE LPTDMP;
EXTERNAL BOOLEAN PROCEDURE COMREAD;
α FUNCTION DEFINITIONS;
DEFINE ARY_TO_ARY(V,I)=⊂VARS[COPA,LENSA,I]←VARS[COPX,LENS,I]⊃,
ARY_TO_VAR(V,I)=⊂V ← VARS[COPX,LENS,I]⊃,
VAR_TO_ARY(V,I)=⊂VARS[COPX,LENS,I] ← V⊃,
DIFFERENCE(V,I)=⊂V ← V-VARS[COPX,LENS,I]⊃,
COPY(FUNC)=⊂ BEGIN
FUNC(ZPOT0,1);
FUNC(ZPOTD,2);
FUNC(PPOT0,3);
FUNC(PPOTD,4);
FUNC(TPOT0,5);
FUNC(TPOTD,6);
FUNC(FPOT0,7);
FUNC(FPOTD,8);
FUNC(MRAT,9);
FUNC(SWING,10);
FOR I←1 STEP 1 UNTIL 2 DO FUNC(PP[I],10+I);
FOR I←1 STEP 1 UNTIL 3 DO FUNC(P0[I],12+I);
FOR I←1 STEP 1 UNTIL 3 DO FUNC(DP[I],15+I);
FUNC(DATE,19);
FUNC(TIME,20);
FUNC(GROREF,21);
FUNC(FOCAL,22);
FUNC(OFFSET,23);
FUNC(FSCALE,24);
FUNC(FMX,25);
FUNC(FMY,26);
FUNC(PAN,27);
FUNC(TILT,28);
FUNC(CALERR,29);
FOR I←1 STEP 1 UNTIL 3 DO FUNC(C[I],29+I);
FUNC(DEV,33);
FOR I←1 STEP 1 UNTIL 2 DO FUNC(COEFF[I],33+I);
FOR I←0 STEP 1 UNTIL 50 DO FUNC(SAVBUF[I],36+I);
END⊃;
α HERE IS WHERE WE PUT ALL THESE GOOD VARIABLES;
SAFEX REAL ARRAY VARS[1:2,1:5,1:86];
α VARIABLES AND COPYING PROCEDURES;
EXTERNAL INTEGER SETNUM,LENS,DATE,TIME,CAMNOM,LPTCH,BREAK,LPTON,SETFLG;
EXTERNAL REAL PPOT0,PPOTD,TPOT0,TPOTD,FPOT0,FPOTD,TOLER,FOCAL,OFFSET,FSCALE,
ZPOT0,ZPOTD,FMX,FMY,MRAT,PAN,TILT,SWING,CALERR,PANPTR,TILPTR,
FOCPTR,ZOOPTR,MFOCNM,POLERR,REFPTR,GROREF,DEV;
SAFEX EXTERNAL REAL ARRAY DP[1:3],C,P0[1:3],COEFF,PP[1:2];
SAFEX EXTERNAL INTEGER ARRAY SAVBUF, STNBUF[0:50];
LABEL XT;
STRING OP;
SHORT INTEGER J, I, K, COPX, COPA, LENSA;
SIMPLE PROCEDURE A_TO_A;
BEGIN INTEGER L,M;
L ← LENS;
M ← LENSA;
IF COPX=2 THEN LENS←1;
IF COPA=2 THEN LENSA←1;
COPY(ARY_TO_ARY);
LENS←L;
LENSA←M;
END;
SIMPLE PROCEDURE V_TO_A;
BEGIN INTEGER L;
L ← LENS;
IF COPX=2 THEN LENS←1;
COPY(VAR_TO_ARY);
LENS ← L;
END;
SIMPLE PROCEDURE A_TO_V;
BEGIN INTEGER L;
L ← LENS;
IF COPX=2 THEN LENS←1;
COPY(ARY_TO_VAR);
LENS ← L;
END;
SIMPLE PROCEDURE DIF;
BEGIN INTEGER L;
L ← LENS;
IF COPX=2 THEN LENS←1;
COPY(DIFFERENCE);
LENS ← L;
END;
α PARSE SPECIFICATIONS - FALSE IF ERROR;
SIMPLE BOOLEAN PROCEDURE PARSE(REFERENCE BOOLEAN NEWY;REFERENCE INTEGER LENS);
BEGIN INTEGER CHAR;
WHILE (CHAR ← LOP(OP))=" " DO;
IF CHAR="O" THEN NEWY←FALSE ELSE IF CHAR="N" THEN NEWY←TRUE ELSE
RETURN(FALSE);
CHAR ← LOP(OP);
IF "1"≤CHAR≤"5" THEN LENS ← CHAR-"0" ELSE RETURN(FALSE);
RETURN(TRUE);
END;
α THIS MAKES STRING 10 CHARACTERS LONG WITH A BLANK ON THE FRONT;
SIMPLE STRING PROCEDURE LN(STRING STR);
RETURN(" "&(" "&STR)[∞-8 TO ∞]);
α THIS MAKES 10 CHAR STRING OF AN INTEGER;
SIMPLE STRING PROCEDURE INTDPY(INTEGER I);
RETURN(LN(CVS(I)));
α THIS MAKES 10 CHAR STRING OF A REAL;
SIMPLE STRING PROCEDURE REALDPY(REAL R);
RETURN(CVG(R));
α DISPLAY ROUTINE;
PROCEDURE DISPLAY(STRING TITLE);
BEGIN DEFINE RAD=⊂180.0/3.14157⊃;
INTEGER F, L, I, J;
STRING STR;
SAFEX INTEGER ARRAY BUFFER[1:1000];
SETFORMAT(2,6);
DPYCLR;
DPYSET(BUFFER);
DPYTYP(-500,1,1);
DPYBRT(7);
DPYBIG(2);
AIVECT(-300,450);
DPYSST(TITLE&CRLF&CRLF);
DPYSST(LN("CAMERA")&LN(IF CAMNOM=1 THEN "LENS" ELSE NULL));
DPYSST(" FILE ERROR GROREF DATE TIME"&CRLF);
DPYSST(INTDPY(CAMNOM)&(IF CAMNOM=1 THEN INTDPY(LENS) ELSE LN(NULL))&
LN(IF COPX=NEWX THEN "NEW" ELSE "OLD")&" "&REALDPY(CALERR)&
REALDPY(GROREF)&DATIM&CRLF&CRLF);
DPYSST(" PPOT0 PPOTD TPOT0 TPOTD FPOT0"&
" FPOTD"&CRLF);
DPYSST(REALDPY(PPOT0)&REALDPY(PPOTD)&REALDPY(TPOT0)&REALDPY(TPOTD)&
REALDPY(FPOT0)&REALDPY(FPOTD)&CRLF&CRLF);
DPYSST((IF CAMNOM=2 THEN " ZPOT0 ZPOTD " ELSE NULL)&
" PP[1] PP[2] P0[1] P0[2] P0[3]"&
CRLF);
DPYSST((IF CAMNOM=2 THEN REALDPY(ZPOT0)&REALDPY(ZPOTD) ELSE NULL)&
REALDPY(PP[1])&REALDPY(PP[2])&REALDPY(P0[1])&REALDPY(P0[2])&
REALDPY(P0[3])&CRLF&CRLF);
DPYSST(" DP[1] DP[2] DP[3] C[1] C[2]"&
" C[3]"&CRLF);
DPYSST(REALDPY(DP[1])&REALDPY(DP[2])&REALDPY(DP[3])&
REALDPY(C[1])&REALDPY(C[2])&REALDPY(C[3])&CRLF&CRLF);
DPYSST(" MRAT SWING FMX FMY"&
(IF CAMNOM=2 THEN " DEV COEFF[1] COEFF[2]" ELSE
NULL)&CRLF);
DPYSST(REALDPY(MRAT)&REALDPY(SWING)&REALDPY(FMX)&REALDPY(FMY)&
(IF CAMNOM=2 THEN REALDPY(DEV)& REALDPY(COEFF[1])&
REALDPY(COEFF[2]) ELSE NULL)&CRLF&CRLF);
DPYSST(" PAN TILT FOCAL OFFSET FSCALE"&CRLF);
DPYSST(REALDPY(PAN*RAD)&REALDPY(TILT*RAD)&REALDPY(FOCAL)&REALDPY(OFFSET)&
REALDPY(FSCALE)&CRLF&CRLF);
DPYSST("DATA SETS ARE ");
STR ← NULL;
F ← 0;
I ← -1;
L ← SAVBUF[0];
FOR J ← 1 STEP 1 UNTIL L DO
BEGIN
IF SAVBUF[J]≠I∨J=L THEN
BEGIN
IF F THEN STR←STR&CVS(F)&(IF I-1=F THEN NULL
ELSE ":"&CVS(IF J=L THEN I ELSE I-1))&",";
F ← I ← SAVBUF[J];
END;
I ← I+1;
END;
DPYSST(STR[1 TO ∞-1]&CRLF&CRLF&"TYPE CR TO CONTINUE");
DPYOUT(1);
INCHWL;
SETFORMAT(0,6);
DPYCLR;
END;
α READ AND WRITE COMPOSITE DATA SETS;
α TRUE IF SET FOUND;
DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
"DATA2[CAL,HE]")⊃,
DATA=⊂3⊃;
SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
BEGIN INTEGER BRK, EOF;
OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
LOOKUP(DATA,DATASET,BRK);
IF BRK THEN
BEGIN
OUTSTR(DATASET&" NOT FOUND"&CRLF);
RETURN(FALSE);
END;
USETI(DATA,1);
BRK←WORDIN(DATA);
α READ AND WRITE COMPOSITE DATA SETS;
α TRUE IF SET FOUND;
DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
"DATA2[CAL,HE]")⊃,
DATA=⊂3⊃;
SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
BEGIN INTEGER BRK, EOF;
OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
LOOKUP(DATA,DATASET,BRK);
IF BRK THEN
BEGIN
OUTSTR(DATASET&" NOT FOUND"&CRLF);
RETURN(FALSE);
END;
USETI(DATA,1);
BRK←WORDIN(DATA);
USETI(DATA,S);
COMIN;
α READ AND WRITE COMPOSITE DATA SETS;
α TRUE IF SET FOUND;
DEFINE DATASET=⊂(IF CAMNOM=1 THEN "DATA1[CAL,HE]" ELSE
"DATA2[CAL,HE]")⊃,
DATA=⊂3⊃;
SIMPLE BOOLEAN PROCEDURE READ(INTEGER S);
BEGIN INTEGER BRK, EOF;
OPEN(DATA,"DSK",12,3,0,128,BRK,EOF);
LOOKUP(DATA,DATASET,BRK);
IF BRK THEN
BEGIN
OUTSTR(DATASET&" NOT FOUND"&CRLF);
RETURN(FALSE);
END;
USETI(DATA,1);
BRK←WORDIN(DATA);
USETI(DATA,S);
COMIN;
RELEASE(DATA);
RETURN(TRUE);
END;
SIMPLE PROCEDURE WRITE;
BEGIN INTEGER BRK,EOF, I;
SIMPLE PROCEDURE WR(INTEGER I);
BEGIN
USETO(DATA,I);
COMOUT;
START_CODE OUTPUT DATA,0; END;
END;
OPEN(DATA,"DSK",12,0,3,128,BRK,EOF);
ENTER(DATA,DATASET,BRK);
USETO(DATA,1);
WORDOUT(DATA,BRK);
COPX ← OLD;
IF CAMNOM=1 THEN FOR I←1 STEP 1 UNTIL 4 DO
BEGIN
LENS ← I;
A_TO_V;
WR(I);
END ELSE BEGIN
LENS ← 1;
A_TO_V;
WR(1);
END;
RELEASE(DATA);
END;
α HERE IS THE MAIN PROGRAM;
SETFORMAT(0,6);
CAMNOM ← 1;
FOR LENS←1 STEP 1 UNTIL 4 DO
BEGIN
COPX ← NEWX;
IF COMREAD THEN V_TO_A;
COPX ← OLD;
IF READ(LENS) THEN V_TO_A;
END;
CAMNOM ← 2;
COPX ← NEWX;
LENS ← 1;
IF COMREAD THEN V_TO_A;
COPX ← OLD;
IF READ(1) THEN V_TO_A;
WHILE TRUE DO
BEGIN "LOOP"
DEFINE INIT=⊂IF ¬PARSE(K,J) THEN GO XT;
LENS ← IF J<5 THEN J ELSE 1;
CAMNOM ← IF J=5 THEN 2 ELSE 1;
COPX ← IF K THEN NEWX ELSE OLD⊃,
CAMDIF=⊂(IF COPX=NEWX THEN "NEW" ELSE "OLD")&
" SET FOR CAMERA "&CVS(CAMNOM)&
(IF CAMNOM=1 THEN ", LENS "&CVS(LENS) ELSE NULL)⊃;
OUTSTR(CRLF&"*");
OP ← INCHWL;
WHILE (I ← LOP(OP))=" " DO;
INIT;
IF I="R" THEN
BEGIN "READ"
J←IF ¬K THEN READ(LENS) ELSE COMREAD;
IF J THEN V_TO_A;
END "READ" ELSE
IF I="W" THEN
BEGIN "WRITE"
A_TO_V;
IF ¬K THEN WRITE ELSE COMWRITE;
END "WRITE" ELSE
IF I="L" THEN
BEGIN "LIST"
A_TO_V;
LPTDMP;
END "LIST" ELSE
IF I="S" THEN
BEGIN "SHOW"
A_TO_V;
DISPLAY(CAMDIF);
END "SHOW" ELSE
IF I="D" THEN
BEGIN "DIFFER" STRING STR;
A_TO_V;
STR←"DIFFERENCE: "&CAMDIF&" - ";
INIT;
DIF;
STR ← STR&CAMDIF;
CAMNOM ← DATE ← TIME ← 0;
DISPLAY(STR);
END "DIFFER" ELSE
IF I="C" THEN
BEGIN "COPY" STRING STR;
STR←"COPY: "&CAMDIF&" FROM ";
COPA ← COPX;
LENSA ← LENS;
INIT;
A_TO_A;
OUTSTR(STR&CAMDIF&CRLF);
END "COPY" ELSE
XT: OUTSTR("??");
END "LOOP";
END "DATRAN";